#ifndef MYCLASS_H
#define MYCLASS_H
#define QDEBUG(MSG) qDebug() << (MSG)
#define CONSOLELOG(str,value) std::cout << str << value << std::endl;

#include <QObject>
#include <QDebug>

class MyClass : public QObject
{
    //QT类的固定宏,只有设置了这个宏,才属于QT类,才具有QT的功能
    Q_OBJECT
    
public:
    explicit MyClass(QObject *parent = nullptr);
    
    // 属性声明
    // 使用Q_PROPERTY宏来声明属性，这样它们就可以在Qt的属性系统中使用
    // Q_INVOKABLE修饰过的函数可以使用 QMetaObject::invokeMethod 来调用
    Q_PROPERTY(int myProperty READ getMyProperty WRITE setMyProperty NOTIFY myPropertyChanged)
    Q_INVOKABLE void Meta_Fun();
    
    
    // 公共方法
public: 
    int getMyProperty() const; // 属性的读取方法
    void setMyProperty(int value); // 属性的设置方法

public slots:
    void Slot_Fun();
    // public slots 槽函数可以使用 QMetaObject::invokeMethod 来调用

signals:
    void myPropertyChanged(int value); // 属性改变时发出的信号
    
private:
    int myProperty; // 属性的私有成员变量
    
};

#endif // MYCLASS_H
